約 5,659,014 件
https://w.atwiki.jp/issacdukastel/pages/36.html
Lv245 LV 1 Bonus 50% Xien 気功系 HACK/DEF LV 2 AGI 極振り 2up Xien 共通系 DEX/AGI LV 3 - 9 AGI 極振り 16up LV 10 - 14 DEX 極振り 8up LV 15 - 35 AGI 極振り 30up LV 36 AGI, STAB * 2 LV 37 - 39 STAB 極振り 11up LV 40 - 52 AGI 極振り 14up LV 53 - 56 HACK 極振り 10up LV 57 HACK LV 58 - 69 AGI 極振り 12up LV 70 - 72 DEF 極振り 9up LV 73 - 86 AGI 極振り 12up LV 87 AGI, STAB * 2 LV 88 - 91 STAB 極振り 12up LV 92 - 105 AGI 極振り 12up LV 106 - 112 HACK 極振り 14up LV 113 - 121 STAB 極振り 18up LV 122 STAB, DEF LV 123 - 128 DEF 極振り 12up LV 129 DEF LV 130 - 133 AGI 極振り 3up LV 134 - 144 STAB 極振り 21up LV 145 - 154 HACK 極振り 17up LV 155 - 185 STAB 極振り 41up LV 186 - 191 DEF 極振り 12up LV 192 STAB 極振り 1up Xien 近接系 STAB/DEF LV 193 - 202 STAB 極振り 11up LV 203 - 245 HACK 極振り 58up イサック/近接 Bonus 122 / 244 Point 1 LV 245 STAB 178 HACK 103 INT 1 DEF 64 MR 1 DEX 200 AGI 200 LV 1 Bonus 50% Xien 気功系 HACK/DEF LV 2 AGI 極振り 2up Xien 共通系 DEX/AGI LV 3 - 9 AGI 極振り 16up LV 10 - 14 DEX 極振り 8up LV 15 - 35 AGI 極振り 30up LV 36 AGI, STAB * 2 LV 37 - 39 STAB 極振り 11up LV 40 - 52 AGI 極振り 14up LV 53 - 56 HACK 極振り 10up LV 57 HACK LV 58 - 69 AGI 極振り 12up LV 70 - 72 DEF 極振り 9up LV 73 - 86 AGI 極振り 12up LV 87 AGI, STAB * 2 LV 88 - 91 STAB 極振り 12up LV 92 - 105 AGI 極振り 12up LV 106 - 112 HACK 極振り 14up LV 113 - 121 STAB 極振り 18up LV 122 STAB, DEF LV 123 - 128 DEF 極振り 12up LV 129 DEF LV 130 - 132 AGI 極振り 3up LV 133 - 159 HACK 極振り 41up LV 160 - 168 STAB 極振り 16up LV 169 - 184 HACK 極振り 20up LV 185 - 190 DEF 極振り 12up LV 191 - 192 Xien 気功系 HACK/DEF LV 193 - 200 HACK 極振り 11up LV 201 HACK, STAB LV 202 - 210 STAB 極振り 14up LV 211 STAB LV 212 HACK, STAB LV 213 - 245 STAB 極振り 42up イサック/近接 Bonus 122 / 244 Point 1 LV 245 STAB 126 HACK 155 INT 1 DEF 64 MR 1 DEX 200 AGI 200
https://w.atwiki.jp/keicyan/pages/15.html
Music Stations Double Clef FM DJ Morgan Merryweather Genre Classical,Opera Tracklist Non piu andrai farfallone amoroso from Le nozze di Figaro https //www.youtube.com/watch?v=g3BthgYwbIU Libiamo ne lieti calici from La traviata https //www.youtube.com/watch?v=RZUonmbtVQo Chi mi frena in tal momento from Lucia di Lammermoor https //www.youtube.com/watch?v=iQw6YpjC9qI Finch han del vino from Don Giovanni http //www.youtube.com/watch?v=tMoNn1lpo04 O mio babbino caro from Gianni Schicchi http //www.youtube.com/watch?v=gnu0qVfCPyA La donna è mobile from Rigoletto http //www.youtube.com/watch?v=xCFEk6Y8TmM Flashback 95.6 DJ Toni Genre 1980s Pop music Tracklist Debbie Harry - Rush Rush http //www.youtube.com/watch?v=AkO8AKzsxcY Elizabeth Daily - Shake It Up http //www.youtube.com/watch?v=f9_W5GwGu6E Paul Engemann - Push It to the Limit http //www.youtube.com/watch?v=N0RmgM1gYYo Amy Holland - She s on Fire http //www.youtube.com/watch?v=ZV1p5-ACS7s Elizabeth Daily - I m Hot Tonight http //www.youtube.com/watch?v=iXepHoToPik Game Radio Fm DJ DJ Stretch Armstrong and Lord Sear Genre Underground hip hop, Midwest hip hop, East Coast hip hop, and Rap music Tracklist Reef - Scary Movies (Instrumental) http //www.youtube.com/watch?v=5_FfbSjOxI4 Royce da 5 9" - We re Live (Danger) http //www.youtube.com/watch?v=PX0uiMBALN0 Nature - Nature Freestyle http //www.youtube.com/watch?v=iXBt42VlLc0 JoJo Pellegrino - JoJo Pellegrino Freestyle http //www.youtube.com/watch?v=AUh9FprtLig Pretty Ugly and Royce da 5 9" - Spit Game http //www.youtube.com/watch?v=J7nUDZtU8YQ Royce da 5 9" - I m the King http //www.youtube.com/watch?v=Ura-ijtpzvM Rush - Instrumental Bed 1 http //www.youtube.com/watch?v=JsvI1IGZMXs Black Rob - By A Stranger Agallah and Sean Price - Rising to the Top http //www.youtube.com/watch?v=u6q6vzbuOrI Rush - Instrumental Bed 2 http //www.youtube.com/watch?v=kysx6K6liFg Head Radio DJ Michael Hunt Genre Soft Rock, Adult Contemporary, and Pop music Tracklist Dil-Don t - Stripe Summer http //www.youtube.com/watch?v=wLETmEZFbbg Craig Gray - Fade Away http //www.youtube.com/watch?v=eOI6f83YizA Conor Jay - Change http //www.youtube.com/watch?v=eLIFnws9LRU Frankie Fame - See Through You http //www.youtube.com/watch?v=P6U6tgGqW58 Scatwerk - Electronic Go Go http //www.youtube.com/watch?v=pmbZwWGQFAM Dezma - Life Is But A Mere Supply http //www.youtube.com/watch?v=IaPyplYrnPQ K-Jah DJ Horace "the Pacifist" Walsh Genre Dub, Reggae Tracklist Scientist - Dance of the Vampires http //www.youtube.com/watch?v=M4YeRXz7ojQ Scientist - Your Teeth in My Neck http //www.youtube.com/watch?v=PJ5DoU2WsWE Scientist - The Corpse Rises http //www.youtube.com/watch?v=hL7EdDU-Q8k Scientist - The Mummy s Shroud http //www.youtube.com/watch?v=FRqRJee66UE Scientist - Plague of Zombies http //www.youtube.com/watch?v=vZlY5cozx50
https://w.atwiki.jp/gcui/pages/55.html
17 55 2011/06/23 TaskbarSorter.exe(GUI) タスクバーのアイコンを種類別に整列ソートする http //web.archive.org/web/20051113014107/http //www12.plala.or.jp/yoshi223/TaskbarSorter/TaskbarSorter.tgz 2004.9.12.17版 ・起動オプション /lock ソート時のタスクバーの描画をロックする. /delayオプションを指定しているときは無効. /sdelay ms 並び替えの前に指定ミリ秒待つ. /delay ms 並び替えのディレイをミリ秒で指定する. このオプションを指定した場合は/lockは無視される. /conf filename カスタムソート設定ファイルを指定する. 必ず起動オプションの最後に記述すること. /check 現在のウィンドウ情報をWindowInfo.logに書き出す. カスタムソートに使用するクラス名の調査に使用のこと. このオプションがあるときは他のオプションは無視され, 並び替えも行われない. /no_pre_sort デフォルトのクラス→ウィンドウタイトルのソートを行わない. カスタムソートを指定したときに,カスタムソート条件に一致 しなかったタスクバーアイコンの並びを変更したくないときに使用. 単独で使用すると何も起こらない. XPでは使用不可. /sort_each_cond カスタムソートの各条件ごとにソートを行う. /no_pre_sortと同時に使用し,各カスタムソート条件に一致 するタスクバーアイコン群だけをソートする. 設定ファイルの書式は次の通り. クラス名1ウィンドウタイトル1 クラス名2ウィンドウタイトル2 ・・・ クラス名とウィンドウタイトルにはワイルドカードが使用可能. ファイルの上位行に書かれたものが先頭に来る. -----TaskbarSorter.cmd------------------- TaskbarSorter.exe /no_pre_sort /conf %~f0 @goto eof カスタムソート設定 ------------------------------------------ "%~f0"にすると、Failed to open config file.、が出て機能しない ""で囲むと駄目みたい %~f0、が気に入らない場合は、%~fs0、でも可
https://w.atwiki.jp/hmiku/pages/55001.html
【検索用 ももいろしーくれっと 登録タグ UTAU も デスおはぎ 曲 重音テト】 + 目次 目次 曲紹介 歌詞 コメント 作詞:デスおはぎ 作曲:デスおはぎ 編曲:デスおはぎ 調声:ゆらほにゃP 唄:重音テト コーラス:初音ミク 曲紹介 (*´ω`*) 「やっぱ妹はね、三十路ツインドリルじゃないとダメだと思うの…うぇっへぇ~いいょねぇ~うぇっwうぇww」 ξ(*゚д゚)ξ 「ビクッ」 曲名:『桃色しーくれっと.exe』(ももいろシークレット.exe) 元々は『俺の妹がこんなに可愛いわけがない』テーマ曲コンテストに応募する予定だったが、締切に間に合わなかった。しかし桐野のツイッターで巡回していたことが判明している。 後に2012年夏の「『俺の妹がこんなに可愛いわけがない』2期ED募集」の再応募用としてリメイク版が投稿された。 歌詞 わん、とぅー、 わん とぅー さん しっ Ah 気が付けばいつだって 魔法にかかったように 追いかけて夢中になってた キミのこと ぎゅぅっと胸締め付ける トドメを刺した声が 離れなくて どうしよう 今日も眠れないよ(*´Д`) ずっと言えないままのこのキモチ 誰かに聞いてほしいの 蕩れる妄想(セカイ)の pass(カギ)を解凍して(とかちて) キミに会いにゆくよ! 桃色のトキメキが降りそそぐ 24時過ぎ 二人だけの物語 鐘が鳴って 止まらないドキドキ vol 上げた ヒミツの夜 とろけそうな甘いユメ カラフルなハートに今見せてあげる ねえ 気が付いてほしいけど ずっとそのままでいてね 気付いたら きっと熱暴走しちゃうkshvdhうぇlfふじこ ホントはあたしだって 教えてほしいくらい ググっても この気持ちなんてわからないし 「もっと近くにきてよ」 どうしても伝えられないコトバ 見えない壁のその向こう側 キミと触れたいから! ミルク色のカクテルが降りそそぐ 26時 二人だけの「冒険の書」を描いて 溢れそうなシロップ vol 下げた イケナイ夜 とろけそうな口唇で ムネノコドウ たしかめて? 誰にも言えない「好き」の一言がね、 駆け巡った電子の世界 誰かがこの気持ち バカにしてもね、 好きなんだもん。しょうがないじゃない? 二次色のトキメキが降りそそぐ ユメの続き 終わりのないエンディング 何度だって 切り取ったモザイク フラグ立てた クライマックス とろけそうな甘い声 震わせる キミの中 桃色に染め上げて 濡れた瞳 漏れる吐息 ぎゅぅっと掴んだ 小さな手を 握りしめて 朝が来るまで 続いていく 二人だけの物語 ユメを見せて Lala... Lala... イェイッ☆ コメント 名前 コメント
https://w.atwiki.jp/opengles/pages/42.html
precision mediump float; uniform sampler2D renderTexture; varying vec2 v_texCoord; uniform float u_blurStep; void main(void) { vec4 sample0, sample1, sample2, sample3; float step = u_blurStep / 100.0; sample0 = texture2D(renderTexture, vec2(v_texCoord.x - step, v_texCoord.y - step)); sample1 = texture2D(renderTexture, vec2(v_texCoord.x + step, v_texCoord.y + step)); sample2 = texture2D(renderTexture, vec2(v_texCoord.x + step, v_texCoord.y - step)); sample3 = texture2D(renderTexture, vec2(v_texCoord.x - step, v_texCoord.y + step)); gl_FragColor = (sample0 + sample1 + sample2 + sample3) / 4.0; }
https://w.atwiki.jp/linux_kai/pages/42.html
Total - (Today - Yesterday - ) 最終更新日 2011/05/17 21 40 slackware 13.37 ( KDEデスクトップ日本語環境 )での設定例まとめ i486(32-bit版)とx86_64(64-bit版)でおそらく共通です このページ内容の対象バージョン slackware 13.37 i486(32-bit版)およびx86_64(64-bit版)で確認しました バージョンが異なる場合、嘘の情報になってしまう可能性があります 1.sudo設定 2.ネットワーク設定2.1. slackwareのIPアドレス固定化 2.2. slackwareのファイアウォール設定 3.パッケージの更新および追加3.1. slackwareのパッケージ更新 3.2. slackwareのパッケージ追加 3.3.日本語入力 4.その他 コメント 1.sudo設定 wheelグループがsudoできるように設定変更します $ su - # visudo %wheel ALL=(ALL) ALL == 行頭の # を削ってwheelグループを有効にする ... # exit wheelグループに自アカウントを追加します $ su - # usermod -G wheel アカウント名 # exit いったんOSからログアウトして再ログインする、自アカウントがwheelグループに所属していればOK $ groups 自アカウント wheel users 2.ネットワーク設定 2.1. slackwareのIPアドレス固定化 static IPを選択して、IPアドレスを固定します $ su - # netconfig # exit 2.2. slackwareのファイアウォール設定 slackwareは初期状態で通信すべて許可の状態なので、そのままでも良い iptablesなどでファイアウォール設定する場合、XLinkKaiで使用するポートは開ける 3.パッケージの更新および追加 3.1. slackwareのパッケージ更新 ミラーサーバの設定ファイルを編集して、国内サーバーのリポジトリを追加します $ su - 13.37 i486の場合 ( 13.1の場合、バージョンの13.37の箇所を13.1にする ) # vi /etc/slackpkg/mirrors # Japan ftp //ftp.riken.jp/slackware/slackware-13.37/ == この行を追加します 13.37 x86_64の場合 # vi /etc/slackpkg/mirrors # Japan ftp //ftp.riken.jp/slackware/slackware64-13.37/ == この行を追加します パッケージを更新してOSを最新状態にします # slackpkg update # slackpkg reinstall slackpkg # slackpkg update # slackpkg upgrade-all 3.2. slackwareのパッケージ追加 パッケージ管理ツール(SlackBuild.org Package Browser)を追加します $ wget http //sbopkg.googlecode.com/files/sbopkg-0.35.0-noarch-1_cng.tgz $ su # /sbin/installpkg sbopkg-0.35.0-noarch-1_cng.tgz # sbopkg -r # exit 3.3.日本語入力 slackwareの標準としてscim-anthyが利用できます 参考URI http //www.tinyogre.com/linux/slackware/index.html また、ibus-mozcもインストール可能でした slackware 13.37 + ibus-mozc 4.その他 ダウンロードファイル用の保存ディレクトリを作成します $ mkdir ~/Downloads 以上でslackwareでの準備はおわり。 上へ戻る コメント 13.37用に修正 -- kar (2011-05-17 21 40 28) 名前 コメント
https://w.atwiki.jp/cohstatsjp/pages/251.html
Vehicle Sherman Calliope Contents 1 Sherman Calliope Veterancy 2 Tactics 3 History 4 Requires 4.1 Calliope Rocket Launcher 5 Called In Using 5.1 M4 Sherman Calliope Reinforcement 6 Company Abilities 6.1 Field Repairs 6.2 Allied War Machine 7 Vehicle Abilities 7.1 Calliope Barrage 7.2 Sherman Smoke Shell 8 Vehicle Upgrades 8.1 Defensive Smoke Screen 9 Vehicle Weapons 9.1 Calliope Rocket 9.2 30 Cal Coaxial MG 9.3 30 Cal Hull MG Sherman Calliope Health 636 Max Speed 4 Sight 35 Cost 42090 Acceleration 1.6 Detection 0/0 Time 55 Deceleration 4 Hotkey Population 10 Rotation 35 Target Type armour_sherman Upkeep 13.824 Crush Human true Critical Type supply_truck Crush Mode crush_medium Rear Damage Enabled true Sherman Calliope Veterancy [Expand][Hide] Maximum Speed Barrage Recharge 1.25 -5 12 Vet-Exp Penetration Barrage Recharge 1.5 -5 24 Vet-Exp Damage Barrage Recharge 1.25 -5 36 Vet-Exp Tactics The Calliope can only be used with the Armored Doctrine. Calliopes do decent damage to vehicles and tanks. The closer the calliope is to the target it is barraging the less spread the rockets will have. Calliopes are excellent to use to support a Pershing, call in a calliope barrage first to weaken enemy tanks then move the Pershing in to attack the weakened tanks. History The US Army felt that they needed a rocket launcher of their own to match the German Nebelwerfer, and additionally sought to place it on a self-propelled chassis. One of the projects to develop a rocket platform brought forth the M4 Sherman Calliope, marrying the T-34 Calliope launcher to an M4 Sherman. This platform was given field trials in Italy, where it met with mixed results. The weapon s maximum range was shorter than desired, and it could only reach that range if the tank was angled upwards on a slope. The launcher was connected to the main gun, using it to traverse the launcher up and down, so the gun couldn t fire until the launcher was ejected. Reloading was a laborious process, and the tank crews required significant retraining to act as competent artillery. Despite this, the trials proved the rocket barrage was devastating against even armoured targets, and some of the modified vehicles were used in the main European theater in a select few tank battalions. The M4 Sherman Calliope is another vehicle that shows up too early in Company of Heroes. There were none available during the Normandy invasion, and would only appear until their field trials in Italy were completed and that nation had fallen. Requires Calliope Rocket Launcher [Expand][Hide] Cost 3 Time Hotkey Effects Deploy an M4 Sherman outfitted with a Calliope T34 Rocket Launcher to the battlefield. ESee Upgrade Calliope Rocket Launcher for details. Called In Using M4 Sherman Calliope Reinforcement [Expand][Hide] Cost 650 Activation targeted Duration 0 Target tp_any Recharge 45 Hotkey Effects An M4 Sherman equipped with a T34 Calliope Rocket Launcher is available for mobile Artillery Support. ESee Ability M4 Sherman Calliope Reinforcement for details. Company Abilities Field Repairs [Expand][Hide] Cost 150 Activation timed Duration 20 Target tp_any Recharge 45 Hotkey Effects Crews will Repair their own Vehicles automatically. ESee Ability Field Repairs for details. Allied War Machine [Expand][Hide] Cost 200 Activation timed Duration 30 Target tp_any Recharge 90 Hotkey Effects Replaces up to 2 destroyed Allied tanks with a new Tank for a period of time. ESee Ability Allied War Machine for details. Vehicle Abilities Calliope Barrage [Expand][Hide] Cost Activation targeted Duration _ Target tp_position Recharge 90 Hotkey B Effects Ripple fire a massive Rocket Barrage from the T34 Launcher on the Calliope. ESee Ability Calliope Barrage for details. Sherman Smoke Shell [Expand][Hide] Cost 50 Activation timed Duration 29 Target tp_entity_and_position Recharge 45 Hotkey S Effects A Smoke Round is fired from the vehicle, temporarily masking itself or targets. ESee Ability Sherman Smoke Shell for details. Vehicle Upgrades Defensive Smoke Screen [Expand][Hide] Cost 15025 Time 45 Hotkey N Effects Equip your M4 Sherman s with Smoke Canisters to create Defensive Smoke Screens. ESee Upgrade Defensive Smoke Screen for details. Vehicle Weapons Calliope Rocket [Expand][Hide] Weapon Calliope Rocket See Weapon Calliope Rocket for details. 30 Cal Coaxial MG [Expand][Hide] Weapon 30 Cal Coaxial MG See Weapon 30 Cal Coaxial MG for details. 30 Cal Hull MG [Expand][Hide] Weapon 30 Cal Hull MG See Weapon 30 Cal Hull MG for details. Retrieved from http //coh-stats.com/Vehicle Sherman_Calliope
https://w.atwiki.jp/nicoratch/pages/809.html
概要 スクラッチ機能と9種のエフェクターを備えたシンプル設計のスクラッチCDプレーヤー。 AMERICAN AUDIOのミキサーとなら、フェーダーを入れただけで曲をスタートできるQ-START再生も可能。 スペック表 Specifications Plays MP3, CD CD-R discs Midi software compatible (Control up to 8 MIDI channels at once) works with nearly every DJ-Software Display shows track titles and artist from ID tags when played Advanced cueing with track searching by frame Quick MP3/CD recognition, Track and Folder Search Advanced Track Search Search for a new track while one is playing PowerTouch advanced digital scratching (with adjustable sensitivity) 2 Scratching modes Digital Scratch mode, Beat Juggle mode Tempo Lock Instant Start 9 On-board FX Scratch, Filter, Echo, Trans, Skid, Phase, Flanger, Pan, Bop 6-inch (150mm) Jog Wheel with LED Cue marker and adjustable LED effects 3 mode Jog Wheel Normal, Scratch, and Auto Cue Scratch(Great for Beat Juggling) Time Ratio adjustment for digital FX FX sync adjustment Red LED Visual marker display Reference point to view where the disc is playing Digital BPM Counter keeps digital FX in sync with music TAP Button for manual BPM Anti Shock (10 sec.) Smart loop Automatically measures your loop Fader Q Start Independently adjustable Pitch Bend (up to 100%) Sleep Mode (Adjustable in increments of 5 - 120 minutes) 3 Flash Start Buttons with (5 second sample each button) Recall memory of Q-Start and samples Store up to 1500 cue points Digital Output (S/PDIF) Headphone jack on rear Slot-In CD drive Flip Flop - Relay playback between two Players Dimensions (LxWxH) 265x356x106 mm Weight 3.6 kg RADIUS 1000 http //www.americandj.eu/en/radius-1000.html
https://w.atwiki.jp/trade_nations/pages/15.html
Trade Nationsは、Amplified Games, Inc.によってリリースされた、国家育成型箱庭MMOオンラインゲームです。 あなた自身の小さな村を作って、トレードネイションの中で大きな街に育てましょう!未加工の資源を収穫し、改良して商品を作り、財産を築 きましょう。より速く成長するために、商品やサービスを友達と取引して下さい。あなたの村人に14種以上の異なった仕事を実行させる事に よって、あなたの村を可能な限り効率的で高い生産力を持つように調整する事が可能です。 • 小さな村から賑やかな街へと育てる為にあなたが選べる60以上の建物とデコレーション。 • あなたの村人の為に家を建て、仕事を与えて、生産力のある社会を作って下さい。 • 本当の需要と供給に従って商品価格が変動する市場に参加しましょう! • 友達を作って、彼等のネイションを訪問し商品を売買しましょう! • あなたのネイションを成長させる多数の商品を管理してください。 • マジックビーンズを使って、仕事を最高タイムで完了するようにしましょう! iTunes store より 基本的には、 コテージを建てる 人が増える 人を資材の生産拠点に派遣するor市場でお金と引き換えに資材を買う 資材をそのまま売るなり、様々に加工して売却 金&xp増える→1に戻る の繰り返しになると思います。 シムシティーやWe rule似たゲームの代表的な例で、この手の育成ゲームが楽しめる人に向いていると言えるでしょう。 基本的にプレイは無料です。フレンドは、ユーザー名さえ分かればすぐに登録できますが、トレードをするためには相手の承認が必要です。 資材の市場価格がその時の市場によって変動すること、かわいらしいキャラが登場する所が特徴であると言えるでしょう。 空欄や誤情報ありましたら編集するかコメントください。よろしくお願いします。 コメント欄 名前 合計: - 今日: - 昨日: - トップページの合計: -
https://w.atwiki.jp/cafemilk/pages/26.html
execute 型 用語に注意 まずは用語に注意することを覚えてください。プラグインには exeute 型と plugin 型があります。 プログラム実行の基本単位は execute 型プラグインで、これを execute と呼びます。 ウェブの各ページは execute の結果出力されます。 execute 型プラグインは execute 名で呼ばれる一連の処理を扱います。 execute 型プラグインは、自己診断処理, execute 処理, 後処理を実施します。 execute の役割 わかりやすく言うと、ブラウザに示される各ページが execute です。 execute 型プラグインはページ特有の処理 (execute) を行い、必要に応じて plugin 型プラグインの実行を行います。個々の execute においては execute 型プラグインが主体となって重要な処理を行い、plugin 型プラグインはその補助的な処理を行います。 plugin 型プラグインが担う補助的な役割は主にスキン部品部分の作成です。 execute 型プラグインも plugin 型プラグインも共にスキンを要求します。execute 型プラグインはウェブ表示全体のレイアウトを指定するスキンを要求します。 それに対し、plugin 型プラグインは部品となるスキンを要求します。plugin 型プラグインにより取得されたスキンは execute 型プラグインにより取得されたスキンに挿入される形になります。 処理の準備 処理の準備は基本エンジン (コントローラ) が行います。 コントローラはリクエストによって実行すべき execute 名を受け取ります。 受け取るリクエストは例えば以下のようになります。 main.cgi?execute=admin_gate リクエストによって execute が指示されなかった場合、規定値が適用されます。 規定値は以下に設定されています。 $config- {default}{execute_type} $config- {default}{execute_type} を設定しているファイルは以下の通りです。 [Apache_server] └ [cgi-bin] └ [config] └ [admin] └ config_basic.pl リクエストの内容は捏造が可能であるため、コントローラはリクエストされた execute が許可されているかをチェックします。 許可されている execute のリストは以下の通りです。カスタマイズによって新規に execute を作成する場合はリストに execute 名を追記しなければなりません。 $config- {list}{execute_type} $config- {list}{execute_type} を設定しているファイルは以下の通りです。 [Apache_server] └ [cgi-bin] └ [config] └ [admin] └ config_basic.pl execute が許可されていない場合は規定値に差し替えられます。 呼び出し コントローラは exeucte 型プラグインを require によって呼び出します。呼び出すファイル名は、execute/exe_ + exeute 名 + .pl となります。 ececute 名が user_inquiry_step1 である場合、以下のようになります。 execute/exe_user_inquiry_step1.pl package 名 execute 型プラグインは package を宣言しなければなりません。宣言する package 名は、Execute_ + exeute 名となります。 ececute 名が user_inquiry_step1 である場合、以下のようになります。 ################################################################################ # # # CAFEMILK SHOPPING CART V5 # # SOHO WORKSHOP CAFEMILK 全権留保 # # # ################################################################################ use strict; # use warnings; use utf8; # use encoding "utf8"; package Execute_user_inquiry_step1; 自己診断処理 もしくは execute の前処理 (用語注意 ex.コントローラの前処理) リクエストされる execute は実行すべきでないことがあります。たとえば、管理機能にかかわる execute に一般のユーザーがアクセスしようとした場合、execute は実行されるべきではありません。 あるいは、ユーザーの入力内容に間違いがあったときに、もう一度入力フォームをユーザーに提示する必要があるかもしれません。 このようなとき、自己診断処理は execute 名を差し替えることができます。 execute の自己診断と差し替えは一度だけ認められています。つまり、差し替えられた execute の自己診断はスキップされます。 以下は自己診断処理の例です。 管理者ログイン済みでないユーザーを排除する場合。 sub check { my $package = shift; my $argument = shift; my $config = $argument- {config}; my $userdata = $argument- {userdata}; my $log_error = $argument- {log_error}; my $log_alert = $argument- {log_alert}; my $status = $argument- {status}; 上の 7 行はコーディングルールによって義務づけられた各種情報の格納処理です。 管理者ログインが無効であるか、あるいは管理者管理権眼がない場合にアクセスを排除。 if ((!$status- {login}{admin} ) or (!$userdata- {admin_registry_values}{manage_admin})) { $userdata- {request_values}{execute}[0] = admin_gate ; } } 会員機能がメンテナンス状態であるときに会員関連の手続をキャンセルする場合。 sub check { my $package = shift; my $argument = shift; my $config = $argument- {config}; my $userdata = $argument- {userdata}; my $log_error = $argument- {log_error}; my $log_alert = $argument- {log_alert}; my $status = $argument- {status}; メンテナンス中はトップページへ移動。 if (($status- {shop_mode} eq 1 ) or ($status- {shop_mode} eq 3 )) { $userdata- {request_values}{execute}[0] = home ; } } 他の処理に転用されている場合。カート関連の集計は各処理に先だって行っておく必要がある。 カート関連の処理はユーザーによる配送先都道府県や決済方法等の選択によって変更する必要がある。カート関連の処理はフレームワーク化されているのでほとんどの処理はサブルーチンを呼び出すだけで適切に実施されます。 sub check { my $package = shift; my $argument = shift; my $config = $argument- {config}; my $userdata = $argument- {userdata}; my $log_error = $argument- {log_error}; my $log_alert = $argument- {log_alert}; my $status = $argument- {status}; メンテナンス時にはカート処理をさせない if (($status- {shop_mode} eq 2 ) or ($status- {shop_mode} eq 3 )) { $userdata- {request_values}{execute}[0] = home ; } else { Cafemilk_basic get_cart ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_basic check_cart ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); コーディングルールにより %input_values にリクエストされた各情報を格納 my %input_values; my @list = qw( process input_point input_ship_prefecture input_payment ); foreach (@list) { $input_values{$_} = $userdata- {request_values}{$_}[0]; } ポイント更新処理 if ($input_values{process} eq point ) { my $point = $input_values{input_point}; $point =~ s/1/1/g; $point =~ s/2/2/g; $point =~ s/3/3/g; $point =~ s/4/4/g; $point =~ s/5/5/g; $point =~ s/6/6/g; $point =~ s/7/7/g; $point =~ s/8/8/g; $point =~ s/9/9/g; $point =~ s/0/0/g; if ($point !~ /[^0-9]/) { $userdata- {cart}{point} = $point; Cafemilk_basic make_cart_data_session ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_session user_postscript ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_basic check_cart_point ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_basic check_cart_grandtotal ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); } } 送料更新処理 if ($input_values{process} eq prefecture ) { my $prefecture = $input_values{input_ship_prefecture}; if (($prefecture !~ /[^0-9]/ ) and ($prefecture 0 ) and ($prefecture = $#{$config- {mailing}{prefecture_cost}})) { $userdata- {cart}{ship_prefecture} = $prefecture; Cafemilk_basic make_cart_data_session ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_session user_postscript ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_basic check_cart_mailing_cost ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_basic check_cart_grandtotal ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); } } 決済手数料更新処理 if ($input_values{process} eq payment ) { my $payment = $input_values{input_payment}; if ($payment !~ /[^0-9a-zA-Z_]/) { $userdata- {cart}{payment} = $payment; Cafemilk_basic make_cart_data_session ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_session user_postscript ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_basic check_cart_payment_cost ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_basic check_cart_grandtotal ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); } } } } execute 処理 execute 型プラグインの execute 処理です。(用語注意) execute 処理が execute における中核的な処理となります。 execute 処理では、コントローラ (基本エンジン) がテンプレートコントローラを実行する準備として以下の情報を必ず用意しなければなりません。 $userdata- {path}{cgi}..... スキン (テンプレート) のパス $userdata- {path}{css}..... スタイルシートのパス $userdata- {path}{material} 画像等ファイルのパス $userdata- {robots_permit}. ロボット制御タグの値 また、テンプレートにて外部 JAVASCRIPT の使用がある場合には以下の情報を必ず用意しなければなりません。 $userdata- {path}{js} 外部 JAVASCRIPT のディレクトリへのパス 一般的に execute 型プラグインの execute 処理は、実行が許可される plugin 型プラグインの設定値に execute 固有の plugin を追記します。 $config- {list}{plugin} 許可される plugin 型プラグインのリスト 以上の情報は、ソース中ではこのように表記されています。 # [STEP1] SET PATH execute 固有の処理は、ソース中ではこのように表記されています。 # [STEP2] PROCESS 以下の例は execute 処理がない場合。必要な情報の用意のみをする。 sub execute { コーディングルールによって義務づけられた各種情報の格納処理 my $package = shift; my $argument = shift; my $config = $argument- {config}; my $userdata = $argument- {userdata}; my $log_error = $argument- {log_error}; my $log_alert = $argument- {log_alert}; my $status = $argument- {status}; 必要な情報の用意 # [STEP1] SET PATH my $path_cgi = "./$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/exe_user_inquiry_step1.html"; my $path_css = "$config- {path}{cgi_to_html}$config- {path}{common}$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/$config- {filename}{admin}{css}"; my $path_material = "$config- {path}{cgi_to_html}$config- {path}{common}$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/"; my $path_js = "$config- {path}{cgi_to_html}$config- {path}{common}$config- {path}{skin}/js/"; my $robot = noindex,follow ; $userdata- {path}{cgi} = $path_cgi; $userdata- {path}{css} = $path_css; $userdata- {path}{material} = $path_material; $userdata- {path}{js} = $path_js; $userdata- {robots_permit} = $robot; 固有の plugin 型プラグインの追記 my @list = qw( user_inquiry_step1 ); push (@{$config- {list}{plugin}},@list); 固有の処理 # [STEP2] PROCESS # none } フォームからの入力情報のチェックをする場合。各種処理がフレームワーク化されているので、それらの処理はサブルーチンを呼び出すだけで適切に実施されます。 sub execute { コーディングルールによって義務づけられた各種情報の格納処理 my $package = shift; my $argument = shift; my $config = $argument- {config}; my $userdata = $argument- {userdata}; my $log_error = $argument- {log_error}; my $log_alert = $argument- {log_alert}; my $status = $argument- {status}; 必要な情報の用意 # [STEP1] SET PATH my $path_cgi = "./$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/exe_user_inquiry_step2.html"; my $path_css = "$config- {path}{cgi_to_html}$config- {path}{common}$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/$config- {filename}{admin}{css}"; my $path_material = "$config- {path}{cgi_to_html}$config- {path}{common}$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/"; my $robot = noindex,follow ; $userdata- {path}{cgi} = $path_cgi; $userdata- {path}{css} = $path_css; $userdata- {path}{material} = $path_material; $userdata- {robots_permit} = $robot; 固有の plugin 型プラグインの追記 my @list = qw( user_inquiry_step2 ); push (@{$config- {list}{plugin}},@list); 以下は固有の処理 # [STEP2] PROCESS WORDLIST 型スキンを呼び出し my @word_list = Cafemilk_basic get_wordlist ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, filename = "./$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/list_input_status.txt", }); 入力チェック用の正規表現の取得 my $regular_expression_email_a = $config- {regular_expression}{email_a}; my $regular_expression_phone_a = $config- {regular_expression}{phone_a}; コーディングルールにより %input_values にリクエストされた各情報を格納 my %input_values; my @list = qw( input_1_email_1 input_1_email_2 input_inquiry ); foreach (@list) { $input_values{$_} = $userdata- {request_values}{$_}[0]; } 個別の入力チェックの結果 $status- {input_match}{$key} を初期化 foreach (@list) { $status- {input_match}{$_} = 1; } 入力チェック開始 不正な入力があると $status- {input_match}{$key} = 0 に # input_1_email_1 ( input_1_email_1 input_1_email_2 ) my $temp_value = $input_values{input_1_email_1}; $temp_value = Encode encode( utf8 ,$temp_value); $temp_value = Encode decode( euc-jp ,$temp_value); if ($input_values{input_1_email_1} eq "") { $status- {input_match}{input_1_email_1} = 0; $status- {input_message}{error_1_email_1} = $word_list[1]; } elsif ($temp_value !~ /^$regular_expression_email_a$/) { $status- {input_match}{input_1_email_1} = 0; $status- {input_message}{error_1_email_1} = $word_list[0]; } elsif ($input_values{input_1_email_1} ne $input_values{input_1_email_2}) { $status- {input_match}{input_1_email_1} = 0; $status- {input_message}{error_1_email_1} = $word_list[5]; } # input_inquiry if ($input_values{input_inquiry} eq "") { $status- {input_match}{input_inquiry} = 0; $status- {input_message}{error_inquiry} = $word_list[1]; } 総合の入力チェックの結果 $status- {input_next} を初期化 # input_next $status- {input_next} = 1; 総合の入力チェック 不正な入力があると $status- {input_next} = 0 に my @list = qw( input_1_email_1 input_inquiry ); foreach (@list) { my $list = $_; if (!$status- {input_match}{$list}) { $status- {input_next} = 0; last; } } 総合の入力チェックが合格なら if ($status- {input_next}) { 次の手続では guest ログイン以上のログイン状態が要求されるので ユーザーのログイン状態をチェックして未ログインなら guest ログインにする if ($userdata- {user_type} eq $config- {default}{user_type}) { Cafemilk_session user_make_guest ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_basic make_cart_data_session ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); Cafemilk_session user_postscript ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, }); } 次の手続では CSRF 攻撃への予防処置が必要なので 実行リクエスト保護多重セッション (user 用) の予約を行う ($userdata- {execute_key}{1},$userdata- {execute_key}{2}, $userdata- {execute_key}{3},$userdata- {execute_key}{4}) = Cafemilk_session set_execute_session_user ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, execute_key = user_inquiry_step3 , }); } } 後処理 後処理は仕様として存在するだけで、用いられていません。 sub post_process { # none } テンプレート処理 execute の HTML テンプレート処理は基本エンジン (コントローラ) が肩代わりするので、execute 型プラグインにコードを書く必要はありません。 execute がメール送信をする場合、MAIL テンプレートの処理を書く必要があります。 以下はメール送信処理の例 (一部)。テンプレート処理やメール送信処理はフレームワーク化されているので、それらの処理はサブルーチンを呼び出すだけで適切に実施されます。 実行リクエスト保護多重セッション (user 用) の検証を行う 有効なら $status- {input_execute} = 1 となる # session $status- {input_execute} = Cafemilk_session check_execute_session_user ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, key_1 = $userdata- {request_values}{key_1}[0], key_2 = $userdata- {request_values}{key_2}[0], execute_key = user_inquiry_step3 , clear = 1, }); 総合の入力チェックの結果 $status- {input_next} を初期化 # input_next $status- {input_next} = 1; 総合の入力チェック 不正な入力があると $status- {input_next} = 0 に my @list = qw( input_1_email_1 input_inquiry ); foreach (@list) { my $list = $_; if (!$status- {input_match}{$list}) { $status- {input_next} = 0; last; } } 総合の入力チェックと実行リクエスト保護が合格なら if (($status- {input_next}) and ($status- {input_execute})) { 処理の実施を記録 $status- {execute_success} = 1; コーディングルールにより %input_values にリクエストされた各情報を格納 my @list = qw( input_1_email_1 input_inquiry ); foreach (@list) { $input_values{$_} = $userdata- {request_values}{$_}[0]; } 同じくコーディングルールにより $userdata- {tag_data} に MAIL テンプレート用の各情報を格納 foreach (keys %input_values) { $userdata- {tag_data}{temporal}{$_} = $input_values{$_}; } MAIL テンプレートエンジンの使用にあたって処理名を準備 my $mail_name = user_inquiry_step3_shop ; MAIL テンプレートエンジンで使用するスキンのパスを準備 my $path = "./$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/mail_user_inquiry_step3_shop.txt"; MAIL テンプレートエンジンのオブジェクトを作成 my $skin = Cafemilk_skin_mail- new ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, name = $mail_name, }); スキンの読み込み $skin- set_path($path); スキン内の MAIL MIDDLE テンプレートタグを読み込む $skin- load_tag_middle(); 許可された MAIL テンプレートタグ名の取得 my @list = @{$config- {list}{tag}{mail}}; 許可されたリストに基づいて MAIL MIDDLE テンプレートタグを処理する $skin- replace_tag_middle ({ allow = \@list, package = "Cafemilk_tag_mail", }); # undef $userdata- {tag_data}{temporal}; MAIL テンプレートの結果を取得 my $source = $skin- get_source(); メール送信 foreach (@{$config- {sendmail}{address}{shop}{to}}) { my $from = $input_values{input_1_email_1}; my $to = $_; my $cc = ; my $bcc = ; my $return = $config- {sendmail}{address}{shop}{return}[0]; Cafemilk_mail skin_sendmail ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, from = $from, to = $to, cc = $cc, bcc = $bcc, source = $source, return = $return, }); } 以下はほぼ同じ処理を繰り返し my $mail_name = user_inquiry_step3_user ; my $path = "./$config- {path}{skin}/user/cgi/$config- {default}{user_type}/$userdata- {device_type}/$userdata- {language_type}/$userdata- {currency_type}/$userdata- {template_type}/mail_user_inquiry_step3_user.txt"; my $skin = Cafemilk_skin_mail- new ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, name = $mail_name, }); $skin- set_path($path); $skin- load_tag_middle(); my @list = @{$config- {list}{tag}{mail}}; $skin- replace_tag_middle ({ allow = \@list, package = "Cafemilk_tag_mail", }); コーディングルールにしたがい $userdata- {tag_data}{temporal} は内容をクリア undef $userdata- {tag_data}{temporal}; my $source = $skin- get_source(); my $from = $config- {sendmail}{address}{shop}{from}[0]; my $to = $input_values{input_1_email_1}; my $cc = ; my $bcc = ; my $return = $config- {sendmail}{address}{shop}{return}[0]; Cafemilk_mail skin_sendmail ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, from = $from, to = $to, cc = $cc, bcc = $bcc, source = $source, return = $return, }); } 以上の例では、MAIL テンプレートエンジンの処理は部分的に実施されています。ここでタグの取得と処理が行われているのは MIDDLE テンプレートタグのみです。 タグはプラグインタグとテンプレートタグ、それぞれに HIGH, MIDDLE, LOW がありますから、その一部しか活用していないことになります。MAIL テンプレート処理では plugin 型プラグインの使用が可能です。